layui.use(['form', 'jquery', 'table', 'layer'], function () {
    const $ = layui.$, form = layui.form, table = layui.table, layer = layui.layer;

    // 更新当前时间
    function updateCurrentTime() {
        const now = moment().format('YYYY年MM月DD日 HH:mm:ss');
        $('#currentTime').text(now);
        $('#currentTimeMobile').text(now);
    }

    $(document).ready(function () {

    });

    setInterval(updateCurrentTime, 1000);
    updateCurrentTime(); // 初始化一次

    // 获取当前用户的用户名和所属单位ID
    const username = sessionStorage.getItem('username');
    const isAdmin = sessionStorage.getItem('isAdmin') === 'true';
    const unitId = parseInt(sessionStorage.getItem('unitId'), 10);

    console.log('当前用户：', username, '所属单位ID：', unitId);
    console.log('当前用户是否为管理员：', isAdmin);
    // 检查 unitId 是否存在，如果不存在则跳转到登录页面
    if (!username || !unitId) {
        layer.msg('请先登录系统', {icon: 2});
        setTimeout(() => {
            window.location.href = '/login.html';
        }, 1500);
        return;
    }

    // 显示欢迎信息
    function displayUsername(username) {
        $('#usernameDisplay').text(username);
        $('#usernameDisplayMobile').text(username);
    }

    displayUsername(username);


    // 初始化表格
    const dataTable = table.render({
        elem: '#dataTable',
        url: `${window.appConfig.apiBaseUrl}/truck-record/unit/${unitId}`,
        method: 'GET',
        page: true,
        limit: '',
        limits: [10, 20, 50, 100, 500, 1000],
        cols: [[
            {field: 'id', title: '序号', width: 80},
            {field: 'uuid', title: '唯一标识符', minWidth: 120},
            {field: 'gateName', title: '门岗', width: 100},
            {field: 'unitName', title: '施工单位', width: 120},
            {field: 'plate', title: '车牌号', width: 120},
            {field: 'time', title: '时间', width: 140, templet: d => d.time ? moment(d.time, 'yyyy-MM-dd HH:mm:ss').format('YYYY年MM月DD日 HH:mm:ss') : '--'},
            {field: 'materialName', title: '材料', width: 100},
            {field: 'density', title: '密度', width: 100, templet: d => (d.density || 0).toFixed(2)},
            {field: 'volume', title: '体积(m³)', width: 100, templet: d => (d.volume || 0).toFixed(2)},
            {field: 'weight', title: '重量(吨)', width: 100, templet: d => (d.weight || 0).toFixed(2)},
            {field: 'scanStatus', title: '扫描状态', width: 100, templet: d => d.scanStatus ? '<span class="layui-badge layui-bg-green">已扫描</span>' : '<span class="layui-badge layui-bg-orange">未扫描</span>'},
            {field: 'syncStatus', title: '同步状态', width: 100, templet: d => d.syncStatus ? '<span class="layui-badge layui-bg-green">已同步</span>' : '<span class="layui-badge layui-bg-orange">未同步</span>'}
        ]],
        request: {
            pageName: 'pageNum',
            limitName: 'pageSize'
        },
        response: {
            statusCode: 200, // 成功状态码
            totalName: 'count', // 数据总条数的字段名
            dataName: 'data' // 数据列表的字段名
        },
        done: function (res) {
            console.log('原始响应数据:', res);

            if (res) {
                $('#totalWeight').text(res.totalWeight ? res.totalWeight.toFixed(2) : '0.00');
                $('#totalVolume').text(res.totalVolume ? res.totalVolume.toFixed(2) : '0.00');
                $('#totalCount').text(res.count || 0);
            }
        },
        error: function (res) {
            console.error('查询失败，状态码：', res.status, '响应内容：', res.responseText);
            layer.msg('查询失败');
        }
    });

    // 将表格数据转换为适合导出的格式
    function transformTableData(data) {
        const columnMapping = {
            id: '序号',
            uuid: '唯一标识符',
            gateName: '门岗',
            unitName: '施工单位',
            plate: '车牌号',
            time: '时间',
            materialName: '材料',
            density: '密度',
            volume: '体积',
            weight: '重量',
            scanStatus: '扫描状态',
            syncStatus: '同步状态'
        };
        return data.map(item => {
            const transformedItem = {};
            for (const key in item) {
                if (columnMapping[key] && key !== 'LAY_TABLE_INDEX' && key !== 'unitId') {
                    transformedItem[columnMapping[key]] = item[key];
                }
            }
            transformedItem['扫描状态'] = item.scanStatus === 1 ? '已扫描' : '未扫描';
            transformedItem['同步状态'] = item.syncStatus === 1 ? '已同步' : '未同步';
            return transformedItem;
        });
    }


    async function getAllTableDataRefresh(tableInstance) {
        const unitId = sessionStorage.getItem('unitId');
        if (!unitId) {
            layer.msg('单位ID无效', {icon: 2});
            return [];
        }

        try {
            const res = await $.ajax({
                url: window.appConfig.apiBaseUrl +'/truck-record/exportByUnit', method: 'GET', data: {
                    unitId: unitId
                }
            });

            console.log('导出数据:', res.data);
            return res.data || [];

        } catch (error) {
            console.error('获取全部数据失败:', error);
            layer.msg('获取数据失败，请重试', {icon: 2});
            return [];
        }
    }

    // 定义导出Excel的函数
    function exportToExcel(data, filename) {
        try {
            // 创建工作簿
            const workbook = XLSX.utils.book_new();
            // 将数据转换为工作表
            const worksheet = XLSX.utils.json_to_sheet(data);
            // 将工作表添加到工作簿
            XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
            // 生成Excel文件
            const excelBuffer = XLSX.write(workbook, {
                bookType: 'xlsx', type: 'array'
            });
            // 创建Blob对象
            const blob = new Blob([excelBuffer], {type: 'application/octet-stream'});
            // 保存文件
            saveAs(blob, filename + '.xlsx');
            layer.msg('导出成功');
        } catch (error) {
            if (error instanceof TypeError) {
                layer.msg('导出失败: 数据格式错误，请检查表格数据');
            } else {
                layer.msg('导出失败:' + error.message);
            }
        }
    }

    // 验证文件名
    function validateFileName(filename) {
        const maxLength = 50; // 设置文件名最大长度
        if (filename.length > maxLength) {
            layer.msg('文件名过长，请缩短文件名');
            return false;
        }
        // 去除常见非法字符
        filename.replace(/[\\/*?:"<>|]/g, '');
        // 进一步检查特殊字符等，可根据需要扩展
        return true;
    }

    // 绑定导出按钮的点击事件
    $('#exportBtn').on('click', async function () {
        const loadingIndex = layer.load(1); // 显示加载动画
        const data = await getAllTableDataRefresh(dataTable);
        layer.close(loadingIndex);
        if (!data || data.length === 0) {
            layer.msg('没有数据可导出');
            return;
        }
        let defaultFilename = `矿车载量信息_${moment().format('YYYYMMDDHHmmss')}`;
        let filename = prompt('请输入要保存的文件名（不包含扩展名）', defaultFilename);
        if (!filename.trim()) {
            layer.msg('文件名不能为空');
            return;
        }

        if (filename === null) {
            // 用户取消了输入
            return;
        }

        if (!validateFileName(filename)) {
            return;
        }

        const transformedData = transformTableData(data);

        // 调用导出函数
        exportToExcel(transformedData, filename);
    });

    // 绑定退出按钮的点击事件
    $('#logoutBtn').on('click', function () {
        layer.confirm('确定要退出系统吗？', {
            icon: 3, title: '确认退出'
        }, function (index) {
            // 清除 sessionStorage 中的用户信息
            sessionStorage.clear();
            // 跳转到登录页面
            window.location.href = '/login.html';
            layer.close(index);
        });
    });
});
